package com.zyf.project.binaryproto.converter;

import java.util.function.Function;

/**
 * <h1>值转换器</h1>
 * <p>基本类型的值转换器，这是一个通用的接口，其下有 Dynamic 和 Fixed 之分</p>
 * <p>再往下有各种数据类型对应的实现，包括 INT8 ~ INT64 的所有类型</p>
 *
 * @author Zhou Yifan
 */
public interface ValueConverter {

    /**
     * 获取值的类型
     *
     * @return Class
     */
    Class<?> getValueType();

    /**
     * 返回类型的默认初始值；
     *
     * @return Object
     */
    Object getDefaultValue();

    /**
     * 数组创建函数，用于decode
     *
     * @return {@link Function}
     */
    default Function<Integer, ?> getArrayConstructor() {
        return null;
    }

}
